package ar.com.ctrln.control.administracion.cliente;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

import ar.com.ctrln.persistence.model.cliente.Cliente;
import ar.com.ctrln.persistence.model.contacto.Contacto;
import ar.com.ctrln.persistence.model.organizacion.TipoActividad;
import ar.com.ctrln.persistence.model.organizacion.TipoOrganizacion;
import ar.com.ctrln.persistence.model.persona.Direccion;
import ar.com.ctrln.persistence.model.persona.Localidad;
import ar.com.ctrln.persistence.model.persona.Provincia;
import ar.com.ctrln.persistence.model.persona.Telefono;
import ar.com.ctrln.persistence.model.sistema.dashboardPpal.Movimiento;
import ar.com.ctrln.services.cliente.GestorCliente;
import ar.com.ctrln.services.contacto.GestorContacto;
import ar.com.ctrln.services.organizacion.GestorTipoActividad;
import ar.com.ctrln.services.organizacion.GestorTipoOrganizacion;
import ar.com.ctrln.services.persona.GestorDireccion;
import ar.com.ctrln.services.persona.GestorLocalidad;
import ar.com.ctrln.services.persona.GestorProvincia;
import ar.com.ctrln.services.persona.GestorTelefono;
import ar.com.ctrln.services.sistema.principal.GestorMovimiento;

@Controller("registrarCliente")
public class RegistrarCliente {

	@Autowired
	private GestorCliente gestorCliente;

	@Autowired
	private GestorContacto gestorContacto;

	@Autowired
	private GestorDireccion gestorDireccion;

	@Autowired
	private GestorTelefono gestorTelefono;

	@Autowired
	private GestorTipoOrganizacion gestorTipoOrganizacion;

	@Autowired
	private GestorTipoActividad gestorTipoActividad;

	@Autowired
	private GestorLocalidad gestorLocalidad;

	@Autowired
	private GestorProvincia gestorProvincia;

	private Cliente cliente;

	private Direccion direccion;

	private Telefono telefono;

	private Contacto contacto;
	
	private Movimiento movimiento;
	
	@Autowired
	private GestorMovimiento gestorMovimiento;

	public void nuevoCliente(Cliente cliente) {

		gestorCliente.guardar(cliente);
		
		//informo el nuevo movimiento a la pantalla principal...		
		movimiento = gestorMovimiento.nuevoMovimiento("Nuevo cliente registrado: "+cliente.getRazonSocial()+", Provincia de "+cliente.getDireccion().getLocalidad().getProvincia().getNombre(), 1, cliente.getId());
		gestorMovimiento.guardar(movimiento);

	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}
	public Cliente getCliente() {

		if (cliente == null)
			cliente = gestorCliente.nuevoCliente();

		return this.cliente;
	}

	public void setDireccion(Direccion direccion) {
		this.direccion = direccion;

	}

	public void setTelefono(Telefono telefono) {
		this.telefono = telefono;
	}

	public Telefono getTelefono() {

		telefono = gestorTelefono.nuevoTelefono();

		return telefono;
	}

	public Direccion getDireccion() {
		if (direccion == null)
			direccion = gestorDireccion.nuevaDireccion();
		return this.direccion;
	}

	public List<TipoActividad> listaTipoActividad() {
		return gestorTipoActividad.listarTipoActividad();
	}

	public List<Provincia> listaProvincias() {
		return gestorProvincia.listarProvincias();
	}

	public List<Localidad> listaLocalidadPorProvincia(long idProvincia) {
		return gestorLocalidad.listarLocalidades(idProvincia);
	}

	public Cliente getCliente(String cuit) {
		return gestorCliente.getCliente(cuit);
	}

	public Contacto getContacto() {
		contacto = gestorContacto.nuevoContacto();
		return contacto;
	}

	public void setContacto(Contacto contacto) {
		this.contacto = contacto;
	}

	public TipoOrganizacion getTipoOrganizacion(String nombre) {
		
		return gestorTipoOrganizacion.find(nombre);
	}

	public Cliente buscarClienteCuit(String cuit) {
		return gestorCliente.buscarCliente(cuit);
	}
}
